A measure of the power of a digital processor is the number of instructions it can execute per second. The greater the number, the greater is the computational power of the processor. To increase the power of a processor, it is therefore necessary to increase the speed at which it executes instructions. Various methods have been heretofore proposed for doing this. These include the use of instruction decode overlap, the use of multiple processors, and the use of so-called pipelining techniques. These methods are more commonly associated with large-scale processors as opposed to smaller processors like microprocessors.
Assume, for example, that it is desired to design a digital information processing system which uses an existing commercially available microprocessor as the primary processing engine. How would one speed up the execution of instructions in such a system? The parameters and operating characteristics of the microprocessor have already been defined. Is there anything that can be done? One solution would be to employ two or more microprocessors which operate in a parallel manner to simultaneously execute instructions for different ones of the program tasks. In such case, the various microprocessors would need to be able to access the instructions and data contained in the same system storage unit. Unfortunately, this leads to contention problems and requires the use of an arbitration mechanism for deciding which one of the microprocessors is to be given access to the storage unit when two or more of them desire such access at the same time. When such contention occurs, the microprocessor performing one of the program tasks is required to sit and wait and hold up further processing until the other microprocessor completes its accessing of the storage unit. This waiting tends to slow things down. Also, in some applications, particularly real time type applications where program tasks must be performed within a fixed time window, this waiting to obtain access to the storage unit is unacceptable.